| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340 | 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
| System.register(['./content-selector', './animator', './util'], function (_export) {
'use strict';
var ContentSelector, Animator, nextElementSibling, ViewSlot;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
return {
setters: [function (_contentSelector) {
ContentSelector = _contentSelector.ContentSelector;
}, function (_animator) {
Animator = _animator.Animator;
}, function (_util) {
nextElementSibling = _util.nextElementSibling;
}],
execute: function () {
ViewSlot = (function () {
function ViewSlot(anchor, anchorIsContainer, executionContext) {
var animator = arguments[3] === undefined ? Animator.instance : arguments[3];
_classCallCheck(this, ViewSlot);
this.anchor = anchor;
this.viewAddMethod = anchorIsContainer ? 'appendNodesTo' : 'insertNodesBefore';
this.executionContext = executionContext;
this.animator = animator;
this.children = [];
this.isBound = false;
this.isAttached = false;
anchor.viewSlot = this;
}
ViewSlot.prototype.transformChildNodesIntoView = function transformChildNodesIntoView() {
var parent = this.anchor;
this.children.push({
fragment: parent,
firstChild: parent.firstChild,
lastChild: parent.lastChild,
removeNodes: function removeNodes() {
var last;
while (last = parent.lastChild) {
parent.removeChild(last);
}
},
created: function created() {},
bind: function bind() {},
unbind: function unbind() {},
attached: function attached() {},
detached: function detached() {}
});
};
ViewSlot.prototype.bind = function bind(executionContext) {
var i, ii, children;
if (this.isBound) {
if (this.executionContext === executionContext) {
return;
}
this.unbind();
}
this.isBound = true;
this.executionContext = executionContext = executionContext || this.executionContext;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].bind(executionContext, true);
}
};
ViewSlot.prototype.unbind = function unbind() {
var i,
ii,
children = this.children;
this.isBound = false;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].unbind();
}
};
ViewSlot.prototype.add = function add(view) {
view[this.viewAddMethod](this.anchor);
this.children.push(view);
if (this.isAttached) {
view.attached();
// Animate page itself
var element = view.firstChild ? nextElementSibling(view.firstChild) : null;
if (view.firstChild && view.firstChild.nodeType === 8 && element && element.nodeType === 1 && element.classList.contains('au-animate')) {
this.animator.enter(element);
}
}
};
ViewSlot.prototype.insert = function insert(index, view) {
if (index === 0 && !this.children.length || index >= this.children.length) {
this.add(view);
} else {
view.insertNodesBefore(this.children[index].firstChild);
this.children.splice(index, 0, view);
if (this.isAttached) {
view.attached();
}
}
};
ViewSlot.prototype.remove = function remove(view) {
view.removeNodes();
this.children.splice(this.children.indexOf(view), 1);
if (this.isAttached) {
view.detached();
}
};
ViewSlot.prototype.removeAt = function removeAt(index) {
var _this = this;
var view = this.children[index];
var removeAction = function removeAction() {
view.removeNodes();
_this.children.splice(index, 1);
if (_this.isAttached) {
view.detached();
}
return view;
};
var element = view.firstChild ? nextElementSibling(view.firstChild) : null;
if (view.firstChild && view.firstChild.nodeType === 8 && element && element.nodeType === 1 && element.classList.contains('au-animate')) {
return this.animator.leave(element).then(function () {
return removeAction();
});
} else {
return removeAction();
}
};
ViewSlot.prototype.removeAll = function removeAll() {
var _this2 = this;
var children = this.children,
ii = children.length,
i;
var rmPromises = [];
children.forEach(function (child) {
var element = child.firstChild ? nextElementSibling(child.firstChild) : null;
if (child.firstChild && child.firstChild.nodeType === 8 && element && element.nodeType === 1 && element.classList.contains('au-animate')) {
rmPromises.push(_this2.animator.leave(element).then(function () {
child.removeNodes();
}));
} else {
child.removeNodes();
}
});
var removeAction = function removeAction() {
if (_this2.isAttached) {
for (i = 0; i < ii; ++i) {
children[i].detached();
}
}
_this2.children = [];
};
if (rmPromises.length > 0) {
return Promise.all(rmPromises).then(function () {
removeAction();
});
} else {
removeAction();
}
};
ViewSlot.prototype.swap = function swap(view) {
var _this3 = this;
var removeResponse = this.removeAll();
if (removeResponse !== undefined) {
removeResponse.then(function () {
_this3.add(view);
});
} else {
this.add(view);
}
};
ViewSlot.prototype.attached = function attached() {
var i, ii, children, child;
if (this.isAttached) {
return;
}
this.isAttached = true;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
child = children[i];
child.attached();
var element = child.firstChild ? nextElementSibling(child.firstChild) : null;
if (child.firstChild && child.firstChild.nodeType === 8 && element && element.nodeType === 1 && element.classList.contains('au-animate')) {
this.animator.enter(element);
}
}
};
ViewSlot.prototype.detached = function detached() {
var i, ii, children;
if (this.isAttached) {
this.isAttached = false;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].detached();
}
}
};
ViewSlot.prototype.installContentSelectors = function installContentSelectors(contentSelectors) {
this.contentSelectors = contentSelectors;
this.add = this.contentSelectorAdd;
this.insert = this.contentSelectorInsert;
this.remove = this.contentSelectorRemove;
this.removeAt = this.contentSelectorRemoveAt;
this.removeAll = this.contentSelectorRemoveAll;
};
ViewSlot.prototype.contentSelectorAdd = function contentSelectorAdd(view) {
ContentSelector.applySelectors(view, this.contentSelectors, function (contentSelector, group) {
return contentSelector.add(group);
});
this.children.push(view);
if (this.isAttached) {
view.attached();
}
};
ViewSlot.prototype.contentSelectorInsert = function contentSelectorInsert(index, view) {
if (index === 0 && !this.children.length || index >= this.children.length) {
this.add(view);
} else {
ContentSelector.applySelectors(view, this.contentSelectors, function (contentSelector, group) {
return contentSelector.insert(index, group);
});
this.children.splice(index, 0, view);
if (this.isAttached) {
view.attached();
}
}
};
ViewSlot.prototype.contentSelectorRemove = function contentSelectorRemove(view) {
var index = this.children.indexOf(view),
contentSelectors = this.contentSelectors,
i,
ii;
for (i = 0, ii = contentSelectors.length; i < ii; ++i) {
contentSelectors[i].removeAt(index, view.fragment);
}
this.children.splice(index, 1);
if (this.isAttached) {
view.detached();
}
};
ViewSlot.prototype.contentSelectorRemoveAt = function contentSelectorRemoveAt(index) {
var view = this.children[index],
contentSelectors = this.contentSelectors,
i,
ii;
for (i = 0, ii = contentSelectors.length; i < ii; ++i) {
contentSelectors[i].removeAt(index, view.fragment);
}
this.children.splice(index, 1);
if (this.isAttached) {
view.detached();
}
return view;
};
ViewSlot.prototype.contentSelectorRemoveAll = function contentSelectorRemoveAll() {
var children = this.children,
contentSelectors = this.contentSelectors,
ii = children.length,
jj = contentSelectors.length,
i,
j,
view;
for (i = 0; i < ii; ++i) {
view = children[i];
for (j = 0; j < jj; ++j) {
contentSelectors[j].removeAt(i, view.fragment);
}
}
if (this.isAttached) {
for (i = 0; i < ii; ++i) {
children[i].detached();
}
}
this.children = [];
};
return ViewSlot;
})();
_export('ViewSlot', ViewSlot);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL3ZpZXctc2xvdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7cURBSWEsUUFBUTs7Ozs7O3lDQUpiLGVBQWU7OzJCQUNmLFFBQVE7O2lDQUNSLGtCQUFrQjs7O0FBRWIsY0FBUTtBQUNSLGlCQURBLFFBQVEsQ0FDUCxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQTZCO2NBQTNCLFFBQVEsZ0NBQUMsUUFBUSxDQUFDLFFBQVE7O2dDQUR4RSxRQUFROztBQUVqQixjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixjQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixHQUFHLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUMvRSxjQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDekMsY0FBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDekIsY0FBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkIsY0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsY0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsZ0JBQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3hCOztBQVZVLGdCQUFRLFdBWW5CLDJCQUEyQixHQUFBLHVDQUFFO0FBQzNCLGNBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7O0FBRXpCLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ2pCLG9CQUFRLEVBQUMsTUFBTTtBQUNmLHNCQUFVLEVBQUMsTUFBTSxDQUFDLFVBQVU7QUFDNUIscUJBQVMsRUFBQyxNQUFNLENBQUMsU0FBUztBQUMxQix1QkFBVyxFQUFBLHVCQUFFO0FBQ1gsa0JBQUksSUFBSSxDQUFDOztBQUVULHFCQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQzdCLHNCQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2VBQzFCO2FBQ0Y7QUFDRCxtQkFBTyxFQUFBLG1CQUFFLEVBQUU7QUFDWCxnQkFBSSxFQUFBLGdCQUFFLEVBQUU7QUFDUixrQkFBTSxFQUFBLGtCQUFFLEVBQUU7QUFDVixvQkFBUSxFQUFBLG9CQUFFLEVBQUU7QUFDWixvQkFBUSxFQUFBLG9CQUFFLEVBQUU7V0FDYixDQUFDLENBQUM7U0FDSjs7QUFoQ1UsZ0JBQVEsV0FrQ25CLElBQUksR0FBQSxjQUFDLGdCQUFnQixFQUFDO0FBQ3BCLGNBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7O0FBRXBCLGNBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNkLGdCQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsRUFBQztBQUM1QyxxQkFBTzthQUNSOztBQUVELGdCQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7V0FDZjs7QUFFRCxjQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixjQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDOztBQUVyRixrQkFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekIsZUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7QUFDM0Msb0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDMUM7U0FDRjs7QUFwRFUsZ0JBQVEsV0FzRG5CLE1BQU0sR0FBQSxrQkFBRTtBQUNOLGNBQUksQ0FBQztjQUFFLEVBQUU7Y0FBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwQyxjQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs7QUFFckIsZUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7QUFDM0Msb0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztXQUN0QjtTQUNGOztBQTdEVSxnQkFBUSxXQStEbkIsR0FBRyxHQUFBLGFBQUMsSUFBSSxFQUFDO0FBQ1AsY0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsY0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXpCLGNBQUcsSUFBSSxDQUFDLFVBQVUsRUFBQztBQUNqQixnQkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUVoQixnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNFLGdCQUFHLElBQUksQ0FBQyxVQUFVLElBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsSUFDOUIsT0FBTyxJQUNQLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUMxQyxrQkFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7V0FDRjtTQUNGOztBQS9FVSxnQkFBUSxXQWlGbkIsTUFBTSxHQUFBLGdCQUFDLEtBQUssRUFBRSxJQUFJLEVBQUM7QUFDakIsY0FBRyxBQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUM7QUFDekUsZ0JBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDaEIsTUFBSztBQUNKLGdCQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN4RCxnQkFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFckMsZ0JBQUcsSUFBSSxDQUFDLFVBQVUsRUFBQztBQUNqQixrQkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1dBQ0Y7U0FDRjs7QUE1RlUsZ0JBQVEsV0E4Rm5CLE1BQU0sR0FBQSxnQkFBQyxJQUFJLEVBQUM7QUFDVixjQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBRW5CLGNBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUVyRCxjQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsZ0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztXQUNqQjtTQUNGOztBQXRHVSxnQkFBUSxXQXdHbkIsUUFBUSxHQUFBLGtCQUFDLEtBQUssRUFBQzs7O0FBQ2IsY0FBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFaEMsY0FBSSxZQUFZLEdBQUcsU0FBZixZQUFZLEdBQVM7QUFDdkIsZ0JBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuQixrQkFBSyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFL0IsZ0JBQUcsTUFBSyxVQUFVLEVBQUM7QUFDakIsa0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNqQjs7QUFFRCxtQkFBTyxJQUFJLENBQUM7V0FDYixDQUFDOztBQUVGLGNBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzRSxjQUFHLElBQUksQ0FBQyxVQUFVLElBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsSUFDOUIsT0FBTyxJQUNQLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUMxQyxtQkFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUUsWUFBTTtBQUM5QyxxQkFBTyxZQUFZLEVBQUUsQ0FBQzthQUN2QixDQUFDLENBQUE7V0FDSCxNQUFNO0FBQ0wsbUJBQU8sWUFBWSxFQUFFLENBQUM7V0FDdkI7U0FDRjs7QUFsSVUsZ0JBQVEsV0FvSW5CLFNBQVMsR0FBQSxxQkFBRTs7O0FBQ1QsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7Y0FDeEIsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNO2NBQ3BCLENBQUMsQ0FBQzs7QUFFTixjQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7O0FBRXBCLGtCQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSyxFQUFJO0FBQ3hCLGdCQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0UsZ0JBQUcsS0FBSyxDQUFDLFVBQVUsSUFDaEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUMvQixPQUFPLElBQ1AsT0FBTyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQ3RCLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQzNDLHdCQUFVLENBQUMsSUFBSSxDQUFDLE9BQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUN0RCxxQkFBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2VBQ3JCLENBQUMsQ0FBQyxDQUFDO2FBQ0wsTUFBTTtBQUNMLG1CQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDckI7V0FDRixDQUFDLENBQUM7O0FBRUgsY0FBSSxZQUFZLEdBQUcsU0FBZixZQUFZLEdBQVM7QUFDdkIsZ0JBQUcsT0FBSyxVQUFVLEVBQUM7QUFDakIsbUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDO0FBQ3JCLHdCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7ZUFDeEI7YUFDRjs7QUFFRCxtQkFBSyxRQUFRLEdBQUcsRUFBRSxDQUFDO1dBQ3BCLENBQUM7O0FBRUYsY0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN4QixtQkFBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQ3hDLDBCQUFZLEVBQUUsQ0FBQzthQUNoQixDQUFDLENBQUM7V0FDSixNQUFNO0FBQ0wsd0JBQVksRUFBRSxDQUFDO1dBQ2hCO1NBQ0Y7O0FBM0tVLGdCQUFRLFdBNktuQixJQUFJLEdBQUEsY0FBQyxJQUFJLEVBQUM7OztBQUNSLGNBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QyxjQUFHLGNBQWMsS0FBSyxTQUFTLEVBQUU7QUFDL0IsMEJBQWMsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUN4QixxQkFBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEIsQ0FBQyxDQUFDO1dBQ0osTUFBTTtBQUNMLGdCQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ2hCO1NBQ0Y7O0FBdExVLGdCQUFRLFdBd0xuQixRQUFRLEdBQUEsb0JBQUU7QUFDUixjQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQzs7QUFFM0IsY0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLG1CQUFPO1dBQ1I7O0FBRUQsY0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLGtCQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6QixlQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUMzQyxpQkFBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixpQkFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUVqQixnQkFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdFLGdCQUFHLEtBQUssQ0FBQyxVQUFVLElBQ2pCLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsSUFDOUIsT0FBTyxJQUNQLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUMzQyxrQkFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7V0FDRjtTQUNGOztBQS9NVSxnQkFBUSxXQWlObkIsUUFBUSxHQUFBLG9CQUFFO0FBQ1IsY0FBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQzs7QUFFcEIsY0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGdCQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixvQkFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekIsaUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDO0FBQzNDLHNCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDeEI7V0FDRjtTQUNGOztBQTNOVSxnQkFBUSxXQTZObkIsdUJBQXVCLEdBQUEsaUNBQUMsZ0JBQWdCLEVBQUM7QUFDdkMsY0FBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQ3pDLGNBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ25DLGNBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ3pDLGNBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ3pDLGNBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQzdDLGNBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1NBQ2hEOztBQXBPVSxnQkFBUSxXQXNPbkIsa0JBQWtCLEdBQUEsNEJBQUMsSUFBSSxFQUFDO0FBQ3RCLHlCQUFlLENBQUMsY0FBYyxDQUM1QixJQUFJLEVBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUNyQixVQUFDLGVBQWUsRUFBRSxLQUFLO21CQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1dBQUEsQ0FDckQsQ0FBQzs7QUFFSixjQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFekIsY0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7V0FDakI7U0FDRjs7QUFsUFUsZ0JBQVEsV0FvUG5CLHFCQUFxQixHQUFBLCtCQUFDLEtBQUssRUFBRSxJQUFJLEVBQUM7QUFDaEMsY0FBRyxBQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUM7QUFDekUsZ0JBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDaEIsTUFBSztBQUNKLDJCQUFlLENBQUMsY0FBYyxDQUM1QixJQUFJLEVBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUNyQixVQUFDLGVBQWUsRUFBRSxLQUFLO3FCQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUFBLENBQ2pFLENBQUM7O0FBRUYsZ0JBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRXJDLGdCQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsa0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNqQjtXQUNGO1NBQ0Y7O0FBcFFVLGdCQUFRLFdBc1FuQixxQkFBcUIsR0FBQSwrQkFBQyxJQUFJLEVBQUM7QUFDekIsY0FBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2NBQ25DLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7Y0FDeEMsQ0FBQztjQUFFLEVBQUUsQ0FBQzs7QUFFVixlQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDO0FBQ25ELDRCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ3BEOztBQUVELGNBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFL0IsY0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7V0FDakI7U0FDRjs7QUFwUlUsZ0JBQVEsV0FzUm5CLHVCQUF1QixHQUFBLGlDQUFDLEtBQUssRUFBQztBQUM1QixjQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztjQUMzQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2NBQ3hDLENBQUM7Y0FBRSxFQUFFLENBQUM7O0FBRVYsZUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUNuRCw0QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUNwRDs7QUFFRCxjQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRS9CLGNBQUcsSUFBSSxDQUFDLFVBQVUsRUFBQztBQUNqQixnQkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1dBQ2pCOztBQUVELGlCQUFPLElBQUksQ0FBQztTQUNiOztBQXRTVSxnQkFBUSxXQXdTbkIsd0JBQXdCLEdBQUEsb0NBQUU7QUFDeEIsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7Y0FDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtjQUN4QyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU07Y0FDcEIsRUFBRSxHQUFHLGdCQUFnQixDQUFDLE1BQU07Y0FDNUIsQ0FBQztjQUFFLENBQUM7Y0FBRSxJQUFJLENBQUM7O0FBRWYsZUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7QUFDckIsZ0JBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRW5CLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUNyQiw4QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRDtXQUNGOztBQUVELGNBQUcsSUFBSSxDQUFDLFVBQVUsRUFBQztBQUNqQixpQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7QUFDckIsc0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4QjtXQUNGOztBQUVELGNBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3BCOztlQTlUVSxRQUFROzs7MEJBQVIsUUFBUSIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS90ZW1wbGF0aW5nL3NyYy92aWV3LXNsb3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnRlbnRTZWxlY3Rvcn0gZnJvbSAnLi9jb250ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7QW5pbWF0b3J9IGZyb20gJy4vYW5pbWF0b3InO1xuaW1wb3J0IHtuZXh0RWxlbWVudFNpYmxpbmd9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3U2xvdCB7XG4gIGNvbnN0cnVjdG9yKGFuY2hvciwgYW5jaG9ySXNDb250YWluZXIsIGV4ZWN1dGlvbkNvbnRleHQsIGFuaW1hdG9yPUFuaW1hdG9yLmluc3RhbmNlKXtcbiAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB0aGlzLnZpZXdBZGRNZXRob2QgPSBhbmNob3JJc0NvbnRhaW5lciA/ICdhcHBlbmROb2Rlc1RvJyA6ICdpbnNlcnROb2Rlc0JlZm9yZSc7XG4gICAgdGhpcy5leGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICB0aGlzLmFuaW1hdG9yID0gYW5pbWF0b3I7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgIGFuY2hvci52aWV3U2xvdCA9IHRoaXM7XG4gIH1cblxuICB0cmFuc2Zvcm1DaGlsZE5vZGVzSW50b1ZpZXcoKXtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5hbmNob3I7XG5cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goe1xuICAgICAgZnJhZ21lbnQ6cGFyZW50LFxuICAgICAgZmlyc3RDaGlsZDpwYXJlbnQuZmlyc3RDaGlsZCxcbiAgICAgIGxhc3RDaGlsZDpwYXJlbnQubGFzdENoaWxkLFxuICAgICAgcmVtb3ZlTm9kZXMoKXtcbiAgICAgICAgdmFyIGxhc3Q7XG5cbiAgICAgICAgd2hpbGUobGFzdCA9IHBhcmVudC5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobGFzdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkKCl7fSxcbiAgICAgIGJpbmQoKXt9LFxuICAgICAgdW5iaW5kKCl7fSxcbiAgICAgIGF0dGFjaGVkKCl7fSxcbiAgICAgIGRldGFjaGVkKCl7fVxuICAgIH0pO1xuICB9XG5cbiAgYmluZChleGVjdXRpb25Db250ZXh0KXtcbiAgICB2YXIgaSwgaWksIGNoaWxkcmVuO1xuXG4gICAgaWYodGhpcy5pc0JvdW5kKXtcbiAgICAgIGlmKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gZXhlY3V0aW9uQ29udGV4dCl7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0IHx8IHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICBmb3IoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICBjaGlsZHJlbltpXS5iaW5kKGV4ZWN1dGlvbkNvbnRleHQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHVuYmluZCgpe1xuICAgIHZhciBpLCBpaSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuXG4gICAgZm9yKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpe1xuICAgICAgY2hpbGRyZW5baV0udW5iaW5kKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkKHZpZXcpe1xuICAgIHZpZXdbdGhpcy52aWV3QWRkTWV0aG9kXSh0aGlzLmFuY2hvcik7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKHZpZXcpO1xuXG4gICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgIHZpZXcuYXR0YWNoZWQoKTtcbiAgICAgIC8vIEFuaW1hdGUgcGFnZSBpdHNlbGZcbiAgICAgIHZhciBlbGVtZW50ID0gdmlldy5maXJzdENoaWxkID8gbmV4dEVsZW1lbnRTaWJsaW5nKHZpZXcuZmlyc3RDaGlsZCkgOiBudWxsO1xuICAgICAgaWYodmlldy5maXJzdENoaWxkICYmXG4gICAgICAgIHZpZXcuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gOCAmJlxuICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiZcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2F1LWFuaW1hdGUnKSkge1xuICAgICAgICB0aGlzLmFuaW1hdG9yLmVudGVyKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGluc2VydChpbmRleCwgdmlldyl7XG4gICAgaWYoKGluZGV4ID09PSAwICYmICF0aGlzLmNoaWxkcmVuLmxlbmd0aCkgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpe1xuICAgICAgdGhpcy5hZGQodmlldyk7XG4gICAgfSBlbHNle1xuICAgICAgdmlldy5pbnNlcnROb2Rlc0JlZm9yZSh0aGlzLmNoaWxkcmVuW2luZGV4XS5maXJzdENoaWxkKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCB2aWV3KTtcblxuICAgICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgICAgdmlldy5hdHRhY2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZSh2aWV3KXtcbiAgICB2aWV3LnJlbW92ZU5vZGVzKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZSh0aGlzLmNoaWxkcmVuLmluZGV4T2YodmlldyksIDEpO1xuXG4gICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgIHZpZXcuZGV0YWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBdChpbmRleCl7XG4gICAgdmFyIHZpZXcgPSB0aGlzLmNoaWxkcmVuW2luZGV4XTtcblxuICAgIHZhciByZW1vdmVBY3Rpb24gPSAoKSA9PiB7XG4gICAgICB2aWV3LnJlbW92ZU5vZGVzKCk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgIGlmKHRoaXMuaXNBdHRhY2hlZCl7XG4gICAgICAgIHZpZXcuZGV0YWNoZWQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfTtcblxuICAgIHZhciBlbGVtZW50ID0gdmlldy5maXJzdENoaWxkID8gbmV4dEVsZW1lbnRTaWJsaW5nKHZpZXcuZmlyc3RDaGlsZCkgOiBudWxsO1xuICAgIGlmKHZpZXcuZmlyc3RDaGlsZCAmJlxuICAgICAgdmlldy5maXJzdENoaWxkLm5vZGVUeXBlID09PSA4ICYmXG4gICAgICBlbGVtZW50ICYmXG4gICAgICBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYXUtYW5pbWF0ZScpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbmltYXRvci5sZWF2ZShlbGVtZW50KS50aGVuKCAoKSA9PiB7XG4gICAgICAgIHJldHVybiByZW1vdmVBY3Rpb24oKTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZW1vdmVBY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBbGwoKXtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLFxuICAgICAgICBpaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgaTtcblxuICAgIHZhciBybVByb21pc2VzID0gW107XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIHZhciBlbGVtZW50ID0gY2hpbGQuZmlyc3RDaGlsZCA/IG5leHRFbGVtZW50U2libGluZyhjaGlsZC5maXJzdENoaWxkKSA6IG51bGw7XG4gICAgICBpZihjaGlsZC5maXJzdENoaWxkICYmXG4gICAgICAgICBjaGlsZC5maXJzdENoaWxkLm5vZGVUeXBlID09PSA4ICYmXG4gICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgICBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmXG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYXUtYW5pbWF0ZScpKSB7XG4gICAgICAgIHJtUHJvbWlzZXMucHVzaCh0aGlzLmFuaW1hdG9yLmxlYXZlKGVsZW1lbnQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNoaWxkLnJlbW92ZU5vZGVzKCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkLnJlbW92ZU5vZGVzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVtb3ZlQWN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgaWk7ICsraSl7XG4gICAgICAgICAgY2hpbGRyZW5baV0uZGV0YWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfTtcblxuICAgIGlmKHJtUHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJtUHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZW1vdmVBY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVBY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBzd2FwKHZpZXcpe1xuICAgIHZhciByZW1vdmVSZXNwb25zZSA9IHRoaXMucmVtb3ZlQWxsKCk7XG4gICAgaWYocmVtb3ZlUmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVtb3ZlUmVzcG9uc2UudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkKHZpZXcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkKHZpZXcpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaGVkKCl7XG4gICAgdmFyIGksIGlpLCBjaGlsZHJlbiwgY2hpbGQ7XG5cbiAgICBpZih0aGlzLmlzQXR0YWNoZWQpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG5cbiAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgZm9yKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpe1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNoaWxkLmF0dGFjaGVkKCk7XG5cbiAgICAgIHZhciBlbGVtZW50ID0gY2hpbGQuZmlyc3RDaGlsZCA/IG5leHRFbGVtZW50U2libGluZyhjaGlsZC5maXJzdENoaWxkKSA6IG51bGw7XG4gICAgICBpZihjaGlsZC5maXJzdENoaWxkICYmXG4gICAgICAgIGNoaWxkLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDggJiZcbiAgICAgICAgIGVsZW1lbnQgJiZcbiAgICAgICAgIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiZcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdS1hbmltYXRlJykpIHtcbiAgICAgICAgdGhpcy5hbmltYXRvci5lbnRlcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXRhY2hlZCgpe1xuICAgIHZhciBpLCBpaSwgY2hpbGRyZW47XG5cbiAgICBpZih0aGlzLmlzQXR0YWNoZWQpe1xuICAgICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICBmb3IoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICAgIGNoaWxkcmVuW2ldLmRldGFjaGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5zdGFsbENvbnRlbnRTZWxlY3RvcnMoY29udGVudFNlbGVjdG9ycyl7XG4gICAgdGhpcy5jb250ZW50U2VsZWN0b3JzID0gY29udGVudFNlbGVjdG9ycztcbiAgICB0aGlzLmFkZCA9IHRoaXMuY29udGVudFNlbGVjdG9yQWRkO1xuICAgIHRoaXMuaW5zZXJ0ID0gdGhpcy5jb250ZW50U2VsZWN0b3JJbnNlcnQ7XG4gICAgdGhpcy5yZW1vdmUgPSB0aGlzLmNvbnRlbnRTZWxlY3RvclJlbW92ZTtcbiAgICB0aGlzLnJlbW92ZUF0ID0gdGhpcy5jb250ZW50U2VsZWN0b3JSZW1vdmVBdDtcbiAgICB0aGlzLnJlbW92ZUFsbCA9IHRoaXMuY29udGVudFNlbGVjdG9yUmVtb3ZlQWxsO1xuICB9XG5cbiAgY29udGVudFNlbGVjdG9yQWRkKHZpZXcpe1xuICAgIENvbnRlbnRTZWxlY3Rvci5hcHBseVNlbGVjdG9ycyhcbiAgICAgIHZpZXcsXG4gICAgICB0aGlzLmNvbnRlbnRTZWxlY3RvcnMsXG4gICAgICAoY29udGVudFNlbGVjdG9yLCBncm91cCkgPT4gY29udGVudFNlbGVjdG9yLmFkZChncm91cClcbiAgICAgICk7XG5cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2godmlldyk7XG5cbiAgICBpZih0aGlzLmlzQXR0YWNoZWQpe1xuICAgICAgdmlldy5hdHRhY2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRlbnRTZWxlY3Rvckluc2VydChpbmRleCwgdmlldyl7XG4gICAgaWYoKGluZGV4ID09PSAwICYmICF0aGlzLmNoaWxkcmVuLmxlbmd0aCkgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpe1xuICAgICAgdGhpcy5hZGQodmlldyk7XG4gICAgfSBlbHNle1xuICAgICAgQ29udGVudFNlbGVjdG9yLmFwcGx5U2VsZWN0b3JzKFxuICAgICAgICB2aWV3LFxuICAgICAgICB0aGlzLmNvbnRlbnRTZWxlY3RvcnMsXG4gICAgICAgIChjb250ZW50U2VsZWN0b3IsIGdyb3VwKSA9PiBjb250ZW50U2VsZWN0b3IuaW5zZXJ0KGluZGV4LCBncm91cClcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCB2aWV3KTtcblxuICAgICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgICAgdmlldy5hdHRhY2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRlbnRTZWxlY3RvclJlbW92ZSh2aWV3KXtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YodmlldyksXG4gICAgICAgIGNvbnRlbnRTZWxlY3RvcnMgPSB0aGlzLmNvbnRlbnRTZWxlY3RvcnMsXG4gICAgICAgIGksIGlpO1xuXG4gICAgZm9yKGkgPSAwLCBpaSA9IGNvbnRlbnRTZWxlY3RvcnMubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICBjb250ZW50U2VsZWN0b3JzW2ldLnJlbW92ZUF0KGluZGV4LCB2aWV3LmZyYWdtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICBpZih0aGlzLmlzQXR0YWNoZWQpe1xuICAgICAgdmlldy5kZXRhY2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRlbnRTZWxlY3RvclJlbW92ZUF0KGluZGV4KXtcbiAgICB2YXIgdmlldyA9IHRoaXMuY2hpbGRyZW5baW5kZXhdLFxuICAgICAgICBjb250ZW50U2VsZWN0b3JzID0gdGhpcy5jb250ZW50U2VsZWN0b3JzLFxuICAgICAgICBpLCBpaTtcblxuICAgIGZvcihpID0gMCwgaWkgPSBjb250ZW50U2VsZWN0b3JzLmxlbmd0aDsgaSA8IGlpOyArK2kpe1xuICAgICAgY29udGVudFNlbGVjdG9yc1tpXS5yZW1vdmVBdChpbmRleCwgdmlldy5mcmFnbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgaWYodGhpcy5pc0F0dGFjaGVkKXtcbiAgICAgIHZpZXcuZGV0YWNoZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlldztcbiAgfVxuXG4gIGNvbnRlbnRTZWxlY3RvclJlbW92ZUFsbCgpe1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4sXG4gICAgICAgIGNvbnRlbnRTZWxlY3RvcnMgPSB0aGlzLmNvbnRlbnRTZWxlY3RvcnMsXG4gICAgICAgIGlpID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBqaiA9IGNvbnRlbnRTZWxlY3RvcnMubGVuZ3RoLFxuICAgICAgICBpLCBqLCB2aWV3O1xuXG4gICAgZm9yKGkgPSAwOyBpIDwgaWk7ICsraSl7XG4gICAgICB2aWV3ID0gY2hpbGRyZW5baV07XG5cbiAgICAgIGZvcihqID0gMDsgaiA8IGpqOyArK2ope1xuICAgICAgICBjb250ZW50U2VsZWN0b3JzW2pdLnJlbW92ZUF0KGksIHZpZXcuZnJhZ21lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMuaXNBdHRhY2hlZCl7XG4gICAgICBmb3IoaSA9IDA7IGkgPCBpaTsgKytpKXtcbiAgICAgICAgY2hpbGRyZW5baV0uZGV0YWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gIH1cbn1cbiJdfQ== |